package servicios;

import java.util.ArrayList;
import java.util.List;


import modelo.Autor;
import modelo.Libro;
import modelo.Operation;
import daos.LibroHome;

/**
 * TODO: description
 */
public abstract class CrearLibro implements Operation<Libro>  {
    
    private String isbn;
    private Double precio;
    private String titulo;
    private List<String> autores;
    private String deposito;
    private String proveedor;
    
    public CrearLibro(String isbn,Double precio, String titulo,List<String> autores,String deposito,String proveedor){
        this.setIsbn(isbn);
        this.setPrecio(precio);
        this.setTitulo(titulo);
        this.setAutores(autores);
        this.setDeposito(deposito);
        this.setProveedor(proveedor);
    }
    
    public abstract Libro create(String isbn,Double precio, String titulo,List<Autor> autores,String deposito,String proveedor);
    
    public Libro execute() {
        
        List<Autor> autoresCreados = new ArrayList<Autor>();
        
        for(String nombreAutor : this.autores){
            autoresCreados.add(new Autor(nombreAutor));
        }
        
        
        Libro libro = this.create(this.isbn,this.precio, this.titulo,autoresCreados,this.deposito,this.proveedor);
        
        for(Autor autor : autoresCreados ){
            autor.addLibro(libro);
        }
        
        new LibroHome().grabar(libro);
        return libro;
    }

    public String getIsbn() {
        return isbn;
    }

    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }

    public Double getPrecio() {
        return precio;
    }

    public void setPrecio(Double precio) {
        this.precio = precio;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public List<String> getAutores() {
        return autores;
    }

    public void setAutores(List<String> autores) {
        this.autores = autores;
    }

    public String getDeposito() {
        return deposito;
    }

    public void setDeposito(String deposito) {
        this.deposito = deposito;
    }

    public String getProveedor() {
        return proveedor;
    }

    public void setProveedor(String proveedor) {
        this.proveedor = proveedor;
    }    
}
